Перейти к основному содержимому

1.15. Текст

Всем

Текст

Что такое текст?

Текст — это упорядоченная последовательность символов, несущая смысловую нагрузку и предназначенная для восприятия человеком или обработки машиной. В вычислительных системах текст фиксируется в виде данных, организованных по правилам конкретного формата и представленных в выбранной кодировке.

Но текст для машины – лишь набор сигналов, которые закодированы в файле определенного формата и с определённой кодировкой символов.

Работа с текстовыми файлами – фундаментальный навык в программировании и ИТ. Различные форматы файлов служат разным целям: хранение данных, конфигурация программ, документирование и многое другое. Рассмотрим основные текстовые форматы и их особенности.

Кодировка символов

Символы, таблица и кодировка

Таблица символов — совокупность символов, каждому из которых сопоставлён уникальный числовой код (идентификатор). Эта таблица служит основой для кодирования и декодирования текста: при записи текста символы заменяются числами; при чтении — числа преобразуются обратно в символы. Примеры таких таблиц: ASCII, Windows-1251, Unicode.

Текстовый символ — минимальная единица текста, которой соответствует определённое изображение (например, буква «А», цифра «7», знак препинания «?», пробел или управляющий символ перевода строки). Каждый символ имеет уникальное числовое представление в рамках выбранной таблицы символов.

Кодировка символов — правило, по которому каждый символ из таблицы символов преобразуется в последовательность байтов при записи в файл или передаче по сети. Кодировка определяет, какие символы доступны, как они выглядят при чтении, и сколько байтов требуется для хранения одного символа. Без указания или корректного распознавания кодировки текст может отображаться как набор вопросительных знаков, кракозябр или иероглифов. Выбор кодировки — обязательный этап при создании или чтении текстового документа.

ASCII (American Standard Code for Information Interchange) был создан в 1963 году и стал основной кодировкой для представления текста в виде чисел. С появлением UNIX (1970) текст стал уже частью системы, храня конфигурацию, логи, скрипты. Позже такую же практику переняли MS-DOS, Windows (README, к примеру, был файлом для представления информации о программе).

Кодировки эволюционировали вместе с потребностями информационных систем. На ранних этапах использовались однобайтовые таблицы (один символ — один байт), что позволяло представить максимум 256 символов. Постепенно возникла необходимость поддерживать множество языков, специальные символы, эмодзи и технические знаки — появилась многоуровневая система Unicode и универсальные кодировки на её основе.


UTF-8

UTF-8 — современная, универсальная, обратно совместимая кодировка, основанная на стандарте Unicode. Она использует переменное число байтов для представления одного символа:

  • символы ASCII (латинские буквы, цифры, знаки препинания) кодируются одним байтом — это делает UTF-8 полностью совместимым со старыми системами;
  • символы кириллицы, греческого, арабского и других алфавитов — двумя байтами;
  • иероглифы, эмодзи, редкие символы — тремя или четырьмя байтами.

UTF-8 стала де-факто стандартом в вебе, операционных системах, языках программирования и протоколах. Почти все современные текстовые редакторы при сохранении предлагают UTF-8 по умолчанию. Она не требует указания порядка байтов (BOM), хотя опциональный BOM может присутствовать.


Windows-1251

Windows-1251 — однобайтовая кодировка, разработанная Microsoft для представления кириллических символов в операционных системах Windows. В ней первые 128 кодов совпадают с ASCII (латиница, цифры, пунктуация), а вторая половина (коды 128–255) отведена под буквы русского, украинского, белорусского, болгарского и других кириллических алфавитов, а также дополнительные знаки.
Windows-1251 широко применялась в русскоязычном сегменте интернета в 1990–2000-е годы: в HTML-страницах, электронных письмах, базах данных. Сегодня её использование сокращается — большинство систем мигрировало на UTF-8. Однако файлы в Windows-1251 всё ещё встречаются: особенно в унаследованных системах, старых документах и региональных ПО.


Другие кодировки

Помимо UTF-8 и Windows-1251, в истории и практике используются и другие:

  • KOI8-R — советская/российская кодировка для кириллицы, созданная в 1980-х для Unix-систем. Отличалась тем, что при потере старшего бита текст оставался читаемым латиницей (например, «Русский» → «rUSSKIJ»). Активно использовалась в FIDO-нет и раннем Рунете.

  • ISO-8859 — семейство однобайтовых кодировок от стандарта ISO:

    • ISO-8859-1 (Latin-1) — западноевропейские языки;
    • ISO-8859-2 — центральноевропейские;
    • ISO-8859-5 — кириллица (редко использовалась в практике);
    • ISO-8859-7 — греческая;
    • ISO-8859-8 — иврит.
      Все они уступили место UTF-8.
  • UTF-16 — кодировка, в которой каждый символ представлен двумя или четырьмя байтами. Используется в Windows API, Java (внутреннее представление строк до Java 9 частично опиралось на UTF-16), JavaScript (в спецификации ECMAScript строки описаны как последовательности 16-битных кодовых единиц). Неудобна для хранения ASCII-текста (вдвое больше места), требует указания порядка байтов (BOM: FF FE или FE FF).

  • UTF-32 — каждый символ — ровно 4 байта. Проста для обработки (фиксированная длина), но неэффективна по памяти. Применяется редко — в основном в специализированных библиотеках обработки текста.

  • CP866 (DOS Cyrillic) — кодировка для кириллицы в MS-DOS. Использовалась в консолях и ранних играх. Отличается от Windows-1251 расположением символов (например, русская буква «А» имеет код 128 в CP866, но 192 в Windows-1251).


Письменности

Латиница — письменность, основанная на древнеримском алфавите. В современном виде состоит из 26 основных букв (A–Z), дополненных диакритическими знаками (например, é, ñ, ü) в языковых вариантах. Используется в английском, французском, немецком, испанском, польском и многих других языках. Является базовой для большинства технических стандартов: имена переменных, домены, протоколы и команды почти всегда используют латинские символы.

Кириллица — алфавит, созданный в IX веке на основе греческого письма и дополненный символами для передачи славянских звуков. Современная кириллица включает 33 буквы в русском языке, но может расширяться или сокращаться в зависимости от языка (например, украинский — 33 буквы, но иные; сербский — 30; болгарский — 30). Используется в русском, украинском, белорусском, болгарском, сербском, македонском, казахском (в части версий), монгольском и других языках.

Арабская — курсивная письменность, пишущаяся справа налево. Используется в арабском, персидском, урду, уйгурском. Включает базовый набор букв и множество вариантов начертания в зависимости от позиции в слове.

Балтийская — группа языков (литовский, латышский), использующих расширенную латиницу с диакритикой (ā, č, š, ž).

Кельтская — в современном IT встречается редко; языки (ирландский, валлийский) используют латиницу с особыми буквами и акцентами.

Центрально-европейская — набор символов на основе латиницы для польского, чешского, венгерского, словацкого языков (например, ł, ř, ő, ň).

Китайская — иероглифическая система, где каждый символ представляет морфему. Поддерживается в Unicode (блоки CJK — Chinese, Japanese, Korean). Требует много байтов на символ (обычно 3 в UTF-8).

Восточно-европейская — часто относится к кириллическим языкам за пределами России (сербский, македонский) или к расширенной латинице (румынский — ă, â, ș, ț).

Греческая — алфавит, используемый в греческом языке и в математике/физике для обозначения переменных (α, β, γ, Δ, Σ и т.д.).

Иврит — письменность, пишущаяся справа налево, без буквенных обозначений кратких гласных в базовой форме. Используется в иврите.

Японская — комбинированная система: иероглифы кандзи (заимствованы из китайского), слоговые азбуки хирагана и катакана. Поддерживается в Unicode; часто вызывает сложности при сортировке и поиске.

Корейскаяхангыль, фонетический алфавит, где символы объединяются в блоки по слогам. Эффективно кодируется в UTF-8 (по 3 байта на символ).

Северо-европейская — скандинавские языки (шведский, норвежский, датский, исландский), использующие латиницу с дополнительными буквами (å, ä, ö, ø, þ, ð).

Тайская — абугида (система, где базовый символ обозначает согласный со встроенным гласным, изменяемым диакритикой). Пишется слева направо, без пробелов между словами.

Турецкая — латиница с уникальными буквами (ç, ğ, ı, İ, ö, ş, ü). Обратите внимание: ı (латинская i без точки) и İ (латинская I с точкой) — разные буквы.

Западно-европейская — покрывает французский, немецкий, испанский, итальянский и др. Расширенная латиница: é, à, ñ, ß, ç, œ.

Вьетнамская — латиница с обильным использованием тоновых знаков и диакритики (à, á, , ã, , ă, â, đ и др.). Один из самых нагруженных диакритикой алфавитов.

Все эти письменности включены в стандарт Unicode, начиная с версии 1.0 (1991) и расширяясь в каждой новой редакции. Современные ОС, браузеры и языки программирования работают с ними через UTF-8.


Преобразование кодировки

Преобразование кодировки — процесс перекодирования текста из одной кодировки в другую без потери смысла. Это необходимо, когда файл записан в кодировке A, а программа ожидает кодировку B.

Пример: файл сохранён в Windows-1251, но веб-сервер отдаёт его как UTF-8 — браузер покажет «РћР±С‹С‡РЅС‹Р№ пользователь». Чтобы исправить это, нужно:

  1. прочитать байты файла как Windows-1251 → получить правильные символы Unicode;
  2. записать эти символы в новом файле как UTF-8.

Преобразование выполняется:

  • вручную — с помощью редакторов (Notepad++, VS Code: «Сохранить как…» → выбрать кодировку);
  • автоматически — при импорте в базы данных (например, PostgreSQL требует указания кодировки при создании БД и при загрузке данных);
  • программно — через библиотеки (в Python — str.encode('windows-1251').decode('utf-8'), в Node.js — пакет iconv-lite).

Важно: преобразование возможно только если исходная кодировка определена верно. Если файл уже повреждён (например, дважды декодирован как UTF-8), восстановление может быть невозможным.


Документ, читаемость и форматирование

Текстовый документ — файл, основное содержимое которого состоит из последовательности текстовых символов, записанных в соответствии с определённой кодировкой. Текстовый документ может включать структуру (например, секции и параметры), комментарии, управляющие символы (такие как перевод строки), но не содержит бинарных данных, изображений или сложных стилей оформления, привязанных к конкретному приложению.

Форматирование — система условных обозначений внутри текстового документа, задающая структуру, иерархию или визуальное представление содержимого. Форматирование может быть явным (например, теги <b>, **, #), неявным (отступы, позиция символа), или отсутствовать вовсе. Цель форматирования — выделить заголовки, списки, цитаты, код, параметры и прочие элементы для удобства чтения и парсинга.

Читаемость — свойство текста, позволяющее человеку быстро и без усилий воспринимать его содержание. Высокая читаемость достигается за счёт простого языка, логичной структуры, умеренного объёма информации на единицу текста, продуманного форматирования и отсутствия избыточной технической сложности.

Машиночитаемость — свойство текстового документа, позволяющее программе однозначно интерпретировать его структуру и данные без участия человека. Машиночитаемый текст следует строгим правилам синтаксиса (например, JSON требует двойных кавычек, фигурных скобок, запятых), не допускает неоднозначностей и предполагает наличие схемы или известного формата.

Человекочитаемость — свойство текстового документа, обеспечивающее удобное и прозрачное восприятие его содержания человеком. Такой текст использует осмысленные имена, комментарии, отступы, пустые строки, понятные комментарии и избегает излишней краткости, сокращений или «магических» значений. Человекочитаемость важна при написании конфигураций, логов, README, инструкций.


Основные текстовые форматы

TXT

TXT (Plain Text, «чистый текст») — базовый текстовый формат, не содержащий элементов форматирования, метаданных или встроенных объектов. Файл TXT представляет собой последовательность символов, закодированных одной из стандартных кодировок (чаще всего UTF-8 или Windows-1251). Его можно открыть и отредактировать любым текстовым редактором — от «Блокнота» до VS Code. TXT используется для логов, временных заметок, простых конфигураций и передачи информации в максимально совместимом виде.

TXT – обычный текстовый файл:

  • простейший формат;
  • нет форматирования;
  • использует кодировки ASCII, UTF-8, Windows-1251 и др.;
  • универсальная читаемость любым текстовым редактором;
  • используется для любых целей – логи, чтение/запись в программах, конфигурациях.

Практическое задание
Создайте файл txt. Откройте этот файл и добавьте текст. Сохраните файл.


INI

Инициализация — процесс подготовки программной системы к работе: загрузка настроек, выделение ресурсов, установка начальных значений, подключение компонентов. В контексте текстовых файлов инициализация часто означает чтение конфигурационного файла при запуске программы, чтобы определить, как она должна вести себя — например, на каком порту слушать подключения, куда писать логи, какие параметры использовать по умолчанию.

INI – стандартный формат конфигурационных файлов. Используется во многих языках программирования и формируется по структуре:

[Section]
key=value
; Комментарий

Слово «ini» происходит от английского слова «initialization» (инициализация) . Это связано с тем, что файлы с расширением .ini часто использовались для настройки параметров программ и систем на начальном этапе их запуска. Формат INI был создан как простой человекочитаемый текстовый формат , позволяющий легко читать и изменять параметры конфигурации. Наиболее известный пример — файл win.ini, который использовался в ранних версиях Windows (например, Windows 3.1) для хранения системных настроек. Важно отметить, что несмотря на существование INI-файлов, Microsoft перешла к Windows Registry - специальное централизованное хранилище настроек, реестр.

Такой формат состоит из секций (квадратные скобки «[]») и параметров (записываются в виде ключ=значение). Сейчас его можно встретить в разных конфигурациях игр, утилит и простых приложений.


CONFIG

Конфигурационный файл — текстовый документ, содержащий параметры и настройки программного обеспечения. Он позволяет отделить настройки от кода, делая приложение гибким и адаптируемым без перекомпиляции. Конфигурационные файлы могут быть написаны в различных форматах (INI, JSON, YAML, XML, TOML) и часто содержат секции, ключи, значения, а также комментарии для пояснения назначения параметров.

CONFIG (от англ. configuration) — это стандартный формат хранения настроек приложений в экосистеме .NET, разработанный Microsoft как часть платформы .NET Framework в 2002 году, это XML-файл со строго определёнными секциями и элементами, пример:

<configuration>
<appSettings>
<add key="Timeout" value="30" />
</appSettings>
</configuration>

В .NET Core и последующих версиях (.NET 5, 6, 7 и т.д.) появился новый стандарт хранения конфигураций — appsettings.json. Этот формат стал популярным благодаря своей простоте, компактности и широкому использованию в мире REST API, микросервисов и облачных решений.

--

Файлы без расширения

Файлы без расширения – те, у которых в имени после точки ничего нет. Часто используются для README, LICENSE, .gitignore, .env, а в Unix-системах могут быть исполняемыми. Внутри них может быть что угодно.

README — текстовый файл, размещаемый в корне проекта и предназначенный для первого ознакомления с ним. Он содержит краткое описание, инструкции по установке и запуску, требования к окружению, примеры использования, ссылки на документацию и контактную информацию. Название происходит от английского read me — «прочти меня». Часто пишется в формате Markdown (README.md), что позволяет использовать заголовки, списки, код и ссылки.

LICENSE — файл, в котором указываются условия использования, копирования, модификации и распространения программного обеспечения. Он фиксирует юридический статус проекта и защищает права авторов и пользователей. В открытых проектах обычно выбирается одна из стандартных лицензий: MIT, Apache 2.0, GPL, BSD. Файл LICENSE часто помещают в корень репозитория рядом с README.

.gitignore — скрытый конфигурационный файл в системе контроля версий Git. Он содержит список путей и шаблонов имён файлов и папок, которые не должны попадать в репозиторий. Например, временные файлы сборки (*.tmp, build/), логи (*.log), локальные настройки разработчика (*.env.local), кэш (node_modules/). Это позволяет поддерживать чистоту репозитория и избегать случайного коммита чувствительных или ненужных данных.

.env — файл окружения, используемый для хранения переменных среды в текстовом виде. Он содержит пары ИМЯ=значение, например:

DATABASE_URL=postgresql://user:pass@localhost:5432/mydb  
DEBUG=true
API_KEY=sk-abc123xyz

Файл .env не включается в Git (добавляется в .gitignore), так как содержит данные, специфичные для конкретного развертывания: ключи, пароли, пути, флаги отладки. При запуске приложения переменные из .env загружаются в операционную среду и становятся доступны программе через стандартные механизмы (например, process.env в Node.js или os.getenv() в Python).